const ci = require('miniprogram-ci');
const { execSync } = require('child_process');
const DotEnv = require('dotenv');
const qr = require('qr-image');
const fs = require('fs');

// 打包描述
const desc =
  (process.argv.filter(data => data.indexOf('desc=') !== -1)[0] || '').split('desc=')[1] || '';

// 版本号
const version =
  (process.argv.filter(data => data.indexOf('version=') !== -1)[0] || '').split('version=')[1] ||
  '';

// 打包环境
const env =
  (process.argv.filter(data => data.indexOf('env=') !== -1)[0] || '').split('env=')[1] || '';
console.log('weixin----env---', env);

// 指定使用哪一个 ci 机器人，可选值：1 ~ 30
const robot =
  (process.argv.filter(data => data.indexOf('robot=') !== -1)[0] || '').split('robot=')[1] || '';

// 开始打包
const cmd = `yarn run build-${env}:mp-weixin`;
console.log('yarn mp-weixin 打包命令::', cmd);
const buildChild = execSync(cmd, {
  stdio: [0, 1, 2],
  encoding: 'utf8',
  // 注入环境变量，打包时的版本号
  env: {
    // 继承环境变量
    ...process.env,
    YKC_MP_VERSION: version,
  },
});
console.log('yarn mp-weixin  打包结果::', buildChild);

// 开始上传微信小程序
const appId = DotEnv.config({ path: `${process.cwd()}/.env.${env}` }).parsed.VITE_MP_WEIXIN_APPID;
console.log('----------开始上传微信小程序------------', appId);
const project = new ci.Project({
  appid: appId,
  type: 'miniProgram',
  projectPath: `${process.cwd()}/dist/build/mp-weixin`,
  privateKeyPath: `${process.cwd()}/config/keys/private.${appId}.key`,
  ignores: ['node_modules/**/*'],
});
const uploadResult = ci.upload({
  project,
  version,
  desc,
  setting: {
    es6: true,
    // autoPrefixWXSS: true,
    minify: true, // 对应于微信开发者工具的 "上传时进行代码保护"
    // codeProtect: true, // 对应于微信开发者工具的 "上传时进行代码保护"
  },
  robot,
  // 不能设置体验版，只能是同用户上传的之前设置过的预览版本
  qrcodeFormat: 'image',
  qrcodeOutputDest: 'destination.jpg',
  onProgressUpdate: console.log,
  pagePath: 'pages/stationMap/stationMap', // 预览页面
})
.then(res => {
  // console.log(res);
  console.log('上传成功1');
  // console.qr(path.join(__dirname, '/destination.jpg'));
  // 生成二维码并输出到控制台
  const url = `https://open.weixin.qq.com/sns/getexpappinfo?appid=${appId}#wechat-redirect`;
  // printQrcode(url);
  const code = qr.image(url, { type: 'jpg', size: 10 });
  // console.log(code);
  // 生成本地文件
  const pic = code.pipe(fs.createWriteStream('destination.jpg'));
  // 监听错误事件
  pic.on('error', (err)=> {
    console.log(err);
  });
  // 监听完成事件
  pic.on('finish', ()=> {
    console.log('二维码生成完毕');
  });
})
.catch(error => {
  if (error.errCode === -1) {
    console.log('上传成功2');
  }
  console.log(error);
  console.log('上传失败');
  process.exit(-1);
});